
/**
* @Title: AtomicIntegerDemo.java
* @Package com.leetone.cas
* @Description: 【】
* @date 2018年3月7日 下午10:51:12
* @version V1.0
* @Company: 上海
* @author:[谭磊][leetone123@163.com]
*/

package com.leetone.cas;

import java.util.concurrent.atomic.AtomicInteger;

/**
* @ClassName: AtomicIntegerDemo
* @Description: 【无锁CAS算法之AtomicInteger实现】
* @date 2018年3月7日 下午10:51:12
* @Company: 上海
* @author:[谭磊][leetone123@163.com]
*/

public class AtomicIntegerDemo {
	static AtomicInteger i =new AtomicInteger();
	public static class AddThread extends Thread{
		@Override
		public void run() {
			for(int j = 0;j<1000000;j++)
			{
				//表示每次都自增1并返回新的值
				//这些方法都是线程安全的
				i.incrementAndGet();
			}
		}
	}
	/**
	 * @throws InterruptedException 
	* @Title: main
	* @Description: 【】
	* @date 2018年3月7日 下午10:51:12
	* @author:[谭磊][leetone123@163.com]
	* @param @param args    参数
	* @return void    返回类型
	* @throws
	*/

	public static void main(String[] args) throws InterruptedException {
		//无锁的类测试线程安全
		//同时发起10个线程来测试该方法是否线程安全
		Thread[] ts = new Thread[10];
		for(int k=0;k<10;k++)
		{
			ts[k] = new Thread(new AddThread()); 
		}
		for(int k=0;k<10;k++)
		{
			ts[k].start();
		}
		for(int k=0;k<10;k++)
		{
			ts[k].join();
		}
		//最后等待完毕输出最后的值
		//如果是线程安全的应该是1000000*10
		System.out.println(i);
	}

}
